<?php
/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of proveedorClass
 *
 * @author Diseño-2
 */
class proveedorClass extends utilClass {


   public function listadoProveedores($razonSocial="",$ruc="",$telefono="",$estado="")
   {
        $criteria = new Criteria();
        if($razonSocial!="")
        {
           $criteria->add(ProveedorPeer::RAZON_SOCIAL,'%'.$razonSocial.'%',  Criteria::LIKE);
        }
        if($ruc!="")
        {
           $criteria->add(ProveedorPeer::RUC,'%'.$ruc.'%',  Criteria::LIKE);
        }
        if($telefono!="")
        {
           $criteria->add(ProveedorPeer::TELEFONO,'%'.$telefono.'%',  Criteria::LIKE);
        }
        if($estado!="none")
        {
           $criteria->add(ProveedorPeer::ESTADO,'%'.$estado.'%',  Criteria::LIKE);
        }
        return $criteria;
    }
    
   public function listadoGeneralProveedores($estado=1)
   {
        $criteria = new Criteria();
        $criteria->add(ProveedorPeer::ESTADO,$estado);        
        return ProveedorPeer::doSelect($criteria);
    }
    
   public function agregarEscalaProveedores($nombreSession,$arrayParametros)
   {

        $primeraescala    = $arrayParametros['primeraescala'];
        $segundaescala    = $arrayParametros['segundaescala'];
        $porcentajeescala = $arrayParametros['porcentajeescala'];

        if($primeraescala!="" && $segundaescala!="" && $porcentajeescala!="")
        {
            $list = sfContext::getInstance()->getUser()->getAttribute($nombreSession,null);
            $id   = 1;
            $repetido = false;
            if($list!=null)
            {
                $result   = array_reverse($list);
                $id       = $result[0]['id']+1;
            }
            if($repetido==false)
            {
                $newArray = array("id"=>$id,"primeraescala"=>$primeraescala,"segundaescala"=>$segundaescala,"porcentajeescala"=>$porcentajeescala);
                $list[]   = $newArray;
            }
            sfContext::getInstance()->getUser()->setAttribute($nombreSession,$list);
        }
    }

   /*Este metodo agregra informacion bancaria extrajera */
   public function agregarInformacionBancariaExtranjera($nombreSession, $arrayParametro)
   {
        $nombrebeneficiario        = $arrayParametro['nombrebeneficiario'];
        $cuentabeneficiario        = $arrayParametro['cuentabeneficiario'];
        $swif                      = $arrayParametro['swif'];
        $abba                      = $arrayParametro['abba'];
        $telefonobancoextranjero   = $arrayParametro['telefonobancoextranjero'];
        $paisbancoextranjero       = $arrayParametro['paisbancoextranjero'];
        $direccionbancoe           = $arrayParametro['direccionbancoe'];
        $nombrebancointermediario  = $arrayParametro['nombrebancointermediario'];
        $cuentabancointermediario  = $arrayParametro['cuentabancointermediario'];
        $paisbancointermediario    = $arrayParametro['paisbancointermediario'];


        if($nombrebeneficiario!="" && $cuentabeneficiario!="")
        {
            $list = sfContext::getInstance()->getUser()->getAttribute($nombreSession,null);
            $id   = 1;
            $repetido = false;
            if($list!=null)
            {
                $result   = array_reverse($list);
                $id       = $result[0]['id']+1;
            }
            if($repetido==false)
            {
                $newArray = array("id"=>$id,"nombrebeneficiario"=>$nombrebeneficiario,"cuentabeneficiario"=>$cuentabeneficiario,"swif"=>$swif,"abba"=>$abba,"telefonobancoextranjero"=>$telefonobancoextranjero,
                                    "paisbancoextranjero"=>$paisbancoextranjero,"direccionbancoe"=>$direccionbancoe,"nombrebancointermediario"=>$nombrebancointermediario,"cuentabancointermediario"=>$cuentabancointermediario,"paisbancointermediario"=>$paisbancointermediario);
                $list[]   = $newArray;
            }
            sfContext::getInstance()->getUser()->setAttribute($nombreSession,$list);
        }


   }
   
   public function eliminarEscalaDetalle($nombreSession,$id)
   {


       $list = sfContext::getInstance()->getUser()->getAttribute($nombreSession,null);
       $clave          = -1;
       if($list!=null)
       {
            while ($row = current($list))
            {
                if ($row['id']==$id)
                {
                    $clave =  key($list);
                    break;
                }
                next($list);
            }
            if($clave!=-1)
            {
                unset($list[$clave]);
                if(count($list)==0)
                {
                    sfContext::getInstance()->getUser()->setAttribute($nombreSession,null);
                }
                else
                {
                   sfContext::getInstance()->getUser()->setAttribute($nombreSession,$list);
                }
               return true;
            }
       }
       return false;


    }

   public function eliminarEscalaDetalleEditar($nombreSession,$id)
   {
        $list = sfContext::getInstance()->getUser()->getAttribute($nombreSession,null);
        $newArray = array("id"=>$id);
        $list[]   = $newArray;
        sfContext::getInstance()->getUser()->setAttribute($nombreSession,$list);
        return true;
   }

   public function eliminarInformacionBancariaExtranjeraDetalle($nombreSession,$id)
   {

       $list = sfContext::getInstance()->getUser()->getAttribute($nombreSession,null);
       $clave          = -1;
       if($list!=null)
       {
            while ($row = current($list))
            {
                if ($row['id']==$id)
                {
                    $clave =  key($list);
                    break;
                }
                next($list);
            }
            if($clave!=-1)
            {
                unset($list[$clave]);
                if(count($list)==0)
                {
                    sfContext::getInstance()->getUser()->setAttribute($nombreSession,null);
                }
                else
                {
                   sfContext::getInstance()->getUser()->setAttribute($nombreSession,$list);
                }
               return true;
            }
       }
       return false;

    }
    
        
   public function eliminarInformacionBancariaExtranjeraEdit($nombreSession,$id)
   {
        $list = sfContext::getInstance()->getUser()->getAttribute($nombreSession,null);
        $newArray = array("id"=>$id);
        $list[]   = $newArray;
        sfContext::getInstance()->getUser()->setAttribute($nombreSession,$list);
        return true;
   }
    
   public function eliminarMediosDetalleEditar($nombreSession,$id)
   {
        $list = sfContext::getInstance()->getUser()->getAttribute($nombreSession,null);
        $newArray = array("id"=>$id);
        $list[]   = $newArray;
        sfContext::getInstance()->getUser()->setAttribute($nombreSession,$list);
        return true;
    }

    
   public function editarEscalaDetalle($nombreSession,$arrayParametro)
   {
        $primeraescala= $arrayParametro['primeraescala'];
        $segundaescala=$arrayParametro['segundaescala'];
        $porcentajeescala=$arrayParametro['porcentajeescala'];

        $list           =  sfContext::getInstance()->getUser()->getAttribute($nombreSession,null);
        $clave          = -1;
          if($list!=null)
        {
              while ($row = current($list))
              {
                 if($row['id']==$arrayParametro["idDetalle"])
                 {
                    $array = $row;
                    $clave = key($list);
                    break;
                 }
                 next($list);
              }

              if($clave!=-1)
              {
                  $list[$clave]  =  array("id"=>$array['id'],"primeraescala"=>$primeraescala,"segundaescala"=>$segundaescala,"porcentajeescala"=>$porcentajeescala);
                  sfContext::getInstance()->getUser()->setAttribute($nombreSession,$list);
                  return true;
              }
        }
        return false;
        
    }

   public function agregarMedios($nombreSession,$arrayParametro)
   {
    $nombreMedios=$arrayParametro['nombreMedios'];
    if($nombreMedios!="")
        {
                    $list = sfContext::getInstance()->getUser()->getAttribute($nombreSession,null);
            $id   = 1;
            $repetido = false;
            if($list!=null)
            {
                $result   = array_reverse($list);
                $id       = $result[0]['id']+1;
            }
            if($repetido==false)
            {
                $newArray = array("id"=>$id,"nombreMedios"=>$nombreMedios);
                $list[]   = $newArray;
            }
            sfContext::getInstance()->getUser()->setAttribute($nombreSession,$list);

        }

    }
    
   public function eliminarMediosDetalle($nombreSession,$id)
   {

       $list = sfContext::getInstance()->getUser()->getAttribute($nombreSession,null);
       $clave          = -1;
       if($list!=null)
       {
            while ($row = current($list))
            {
                if ($row['id']==$id)
                {
                    $clave =  key($list);
                    break;
                }
                next($list);
            }
            if($clave!=-1)
            {
                unset($list[$clave]);
                if(count($list)==0)
                {
                    sfContext::getInstance()->getUser()->setAttribute($nombreSession,null);
                }
                else
                {
                   sfContext::getInstance()->getUser()->setAttribute($nombreSession,$list);
                }
               return true;
            }
       }
       return false;
   }

   /* Metodo para editar la infomacion de los medios, se ejecuta en el 
    * modulo de crear un proveedor */
   public function editarMediosDetalle($nombreSession,$arrayParametro)
   {

        $nombreMedios= $arrayParametro['nombreMedios'];
        $list           =  sfContext::getInstance()->getUser()->getAttribute($nombreSession,null);
        $clave          = -1;
          if($list!=null)
        {
              while ($row = current($list))
              {
                 if($row['id']==$arrayParametro["idDetalle"])
                 {
                    $array = $row;
                    $clave = key($list);
                    break;
                 }
                 next($list);
              }

              if($clave!=-1)
              {
                  $list[$clave]  =  array("id"=>$array['id'],"nombreMedios"=>$nombreMedios);
                  sfContext::getInstance()->getUser()->setAttribute($nombreSession,$list);
                  return true;
              }
        }
        return false;
        }

   public function buscarCuentaBancariaExtranjera($nombreSession,$id)
   {

        $arrayRespuesta =  array("success"=>false,"nombrebeneficiario"=>null,"cuentabeneficiario"=>null,"paisbancoextranjero"=>null,"swif"=>null,"abba"=>null,"telefonobancoextranjero"=>null,"direccionbancoe"=>null,"nombrebancointermediario"=>null,"cuentabancointermediario"=>null,"paisbancointermediario"=>null);


        $list           =  sfContext::getInstance()->getUser()->getAttribute($nombreSession,null);
        $clave          = -1;
          if($list!=null)
        {
              while ($row = current($list))
              {
                 if($row['id']==$id)
                 {

                     $arrayRespuesta['success'] = true;
                     $arrayRespuesta['nombrebeneficiario']  = $row['nombrebeneficiario'];
                     $arrayRespuesta['cuentabeneficiario']  = $row['cuentabeneficiario'];
                     $arrayRespuesta['paisbancoextranjero'] = $row['paisbancoextranjero'];
                     $arrayRespuesta['swif']=$row['swif'];
                     $arrayRespuesta['abba']=$row['abba'];
                     $arrayRespuesta['telefonobancoextranjero']=$row['telefonobancoextranjero'];
                     $arrayRespuesta['direccionbancoe']=$row['direccionbancoe'];
                     $arrayRespuesta['nombrebancointermediario']=$row['nombrebancointermediario'];
                     $arrayRespuesta['cuentabancointermediario']=$row['cuentabancointermediario'];
                     $arrayRespuesta['paisbancointermediario']=$row['paisbancointermediario'];
                    break;
                 }
                 next($list);
              }

              
        }


        return $arrayRespuesta;
 }
        
   public function getProveedor($idProveedor,$tipoBusqueda="id")
   {
        $proveedorBean = null;
        if($tipoBusqueda=="id")
        {
              $proveedorBean =ProveedorPeer::retrieveByPK($idProveedor);
        }
        return $proveedorBean;
    }

   public function obtenerProveedor($idProveedor)
   {      
        sfContext::getInstance()->getUser()->setAttribute('s_editDetalleContactoEdit',null);
        sfContext::getInstance()->getUser()->setAttribute('s_sesionEscalaEditar',null);
        sfContext::getInstance()->getUser()->setAttribute('s_sesionMedioEditar',null);
        sfContext::getInstance()->getUser()->setAttribute('s_sesionDetalleInfoBancariaExtrajeraEdit',null);
        sfContext::getInstance()->getUser()->setAttribute('s_sesionDetalleInfoBancariaNacionalEdit',null);
        
        $arrayRespuesta       =  array("success"=>false,"mensaje"=>"Proveedor no encontrado","objecto"=>null,"code"=>601);
        $sessionNameInfoBancaria                =  "s_editProveedoresInfoBancaria";
        $sessionNamesCuentaBancariaExtranjera   =  "s_editCuentaBancariaExtranjera";
        $sessionNameEscala       =  "s_editEscala";
        $sessionNameMedio        =  "s_editarMedio";
        $sessionNameContacto     =  "s_editDetalleContacto";
        sfContext::getInstance()->getUser()->setAttribute($sessionNameInfoBancaria,null);
        sfContext::getInstance()->getUser()->setAttribute($sessionNamesCuentaBancariaExtranjera,null);
        sfContext::getInstance()->getUser()->setAttribute($sessionNameEscala,null);
        sfContext::getInstance()->getUser()->setAttribute($sessionNameMedio,null);
        sfContext::getInstance()->getUser()->setAttribute($sessionNameContacto,null);

        $proveedorBean= ProveedorPeer::retrieveByPK($idProveedor);
        if(is_object($proveedorBean))
        {
            
           $this->crearSessionDetalleContacto($sessionNameContacto, $idProveedor);
           $this->crearSessionDetalleEscala($sessionNameEscala, $idProveedor);
           $this->crearSessionDetalleMedios($sessionNameMedio, $idProveedor); 
           /* si tipo es nacional */
           if($proveedorBean->getTipoBanco()=="nacional")
           {
                $this->crearSessionDetalleInformacionBancariaNacional($sessionNameInfoBancaria, $idProveedor);
           }
           else
           {
               $this->crearSessionDetalleInformacionBancariaExtranjera($sessionNamesCuentaBancariaExtranjera, $idProveedor);
           }
           $arrayRespuesta['success'] = true;
           $arrayRespuesta['mensaje'] = "exito";
           $arrayRespuesta['objecto'] = $proveedorBean;            
        }

        return $arrayRespuesta;
   }
                
   public  function ingresarProveedor($arrayParametros)
   {
         $arrayRespuesta =  array("success"=>false,"mensaje"=>"Error al grabar Detalle","objecto"=>null,"code"=>602);
         try 
         {
             $sessionName= "s_proveedorInfoBancaria";
             $coneccion   = Propel::getConnection();
             $coneccion->beginTransaction();
             $proveedor = new Proveedor();

             $proveedor->setRazonSocial($arrayParametros['razon']);
             $proveedor->setRuc($arrayParametros['ruc']);
             $proveedor->setDireccion($arrayParametros['direccion']);
             $proveedor->setTelefono($arrayParametros['telefono']);
             $proveedor->setRegimenId($arrayParametros['regimen']);
             $proveedor->setRebate($arrayParametros['rebate']);
             $proveedor->setDiasPagaproveedor($arrayParametros['diaspagaproveedor']);           
             $proveedor->setCuentaDetraccion($arrayParametros['cuentadetraccion']);
             $proveedor->setObservaciones($arrayParametros['observacionesp']);
             $proveedor->setTipoBanco(strtolower($arrayParametros['tipoBanco']));
             $proveedor->setEstado(1);
             $proveedor->save();
             $coneccion->commit();
             
             /*Comienzo a inserter los detalles */
             $tipoBanco = $arrayParametros['tipoBanco'];
             if($tipoBanco=="nacional")
             {
                 $this->ingresarDetalleInformacionBancaria($sessionName, 3, $proveedor->getId());             
             }
             else
             {
                 $this->insertarDetalleInformacionBancariaExtranajera( $proveedor->getId());
             }             
             $this->insertarDetalleEscala($proveedor->getId());
             $this->insertarDetalleMedios($proveedor->getId());
             $this->insertarDetalleContacto($proveedor->getId());
             /*Limpio todas la sessiones*/
             sfContext::getInstance()->getUser()->setAttribute('s_sesionEscala', null);
             sfContext::getInstance()->getUser()->setAttribute('s_sesionDetalleContacto', null);
             sfContext::getInstance()->getUser()->setAttribute('s_agregarMedios', null);
             sfContext::getInstance()->getUser()->setAttribute('s_sessionCuentaBancariaExtranjera', null);
             sfContext::getInstance()->getUser()->setAttribute('s_proveedorInfoBancaria', null);
             /*=======fin de insertar detalles ======*/             
             $arrayRespuesta['success'] = true;
             $arrayRespuesta['mensaje']  = "Exito";
             Propel::close();

         } catch (Exception $exc) {
            $coneccion->rollBack();
            Propel::close();
            $arrayRespuesta['mensaje'] = $exc->getMessage();
            $arrayRespuesta['code']    = 601;
            return $arrayRespuesta;
         }
          return $arrayRespuesta;

        }

   public function editarProveedor($arrayParametros)
   {
            $arrayRespuesta =  array("success"=>false,"mensaje"=>"Error al grabar Proveedor","objecto"=>null,"code"=>602);
              
            try {
                
                $sessionNameInfoBancaria              = "s_editProveedoresInfoBancaria";
                $sessionNamesCuentaBancariaExtranjera = "s_editCuentaBancariaExtranjera";
                
                $sessionNameContacto  = "s_editDetalleContacto";
                $sessionNameEscala    = "s_editEscala";
                $sessionNameMedio     = "s_editarMedio";
                
                $s_eliminarInfoBancariaExtranjera  = "s_sesionDetalleInfoBancariaExtrajeraEdit";
                $s_eliminarEscala     = "s_sesionEscalaEditar";
                $s_eliminarMedio      = "s_sesionMedioEditar";
                $s_eliminarContacto   = "s_editDetalleContactoEdit";


                $coneccion   = Propel::getConnection();
                $coneccion->beginTransaction();
                $proveedor = $this->getProveedor($arrayParametros['idProveedor']);
                if(is_object($proveedor))
                {
                     $proveedor->setRazonSocial($arrayParametros['razon']);
                     $proveedor->setRuc($arrayParametros['ruc']);
                     $proveedor->setDireccion($arrayParametros['direccion']);
                     $proveedor->setTelefono($arrayParametros['telefono']);
                     $proveedor->setRegimenId($arrayParametros['regimen']);
                     $proveedor->setRebate($arrayParametros['rebate']);
                     $proveedor->setTipoBanco(strtolower($arrayParametros['tipoBanco']));
                     $proveedor->setDiasPagaproveedor($arrayParametros['diaspagaproveedor']);
                     $proveedor->setCuentaDetraccion($arrayParametros['cuentadetraccion']);
                     $proveedor->setObservaciones($arrayParametros['observacionesp']);
                     $proveedor->setEstado($arrayParametros['estado']);
                     $proveedor->save();

                     $coneccion->commit();
                     $arrayRespuesta['success'] = true;
                     $arrayRespuesta['mensaje'] = "exito";
                     $arrayRespuesta['objecto'] = $proveedor;
                       
                     /*Comienzo a inserter los detalles */
                     $tipoBanco = $arrayParametros['tipoBanco'];
                     if($tipoBanco=="nacional")
                     {
                          $this->editarDetalleInfomacionBancaria($sessionNameInfoBancaria, 3, $proveedor->getId());             
                          $this->eliminarDetalleInfomacionBancaria("s_sesionDetalleInfoBancariaNacionalEdit", 3, $proveedor->getId());
                     }
                     else
                     {
                          $this->editarDetalleInformacionBancariaExtranjera( $sessionNamesCuentaBancariaExtranjera,$proveedor->getId());
                          $this->eliminarDetalleBancariaExtranjera($s_eliminarInfoBancariaExtranjera);
                     } 
                     $this->editarDetalleMedios($sessionNameMedio,$proveedor->getId());                      
                     $this->editarDetalleEscala($sessionNameEscala,$proveedor->getId());
                     $this->editarDetalleContactoBd($sessionNameContacto,$proveedor->getId());
                 
                     $this->eliminarDetalleEscala($s_eliminarEscala);
                     $this->eliminarDetalleMedios($s_eliminarMedio);
                     $this->eliminarDetalleContactoBd($s_eliminarContacto);
                    
                     
                     Propel::close();
                }
            } catch (Exception $e) {
                          $coneccion->rollBack();
            Propel::close();
            $arrayRespuesta['mensaje'] = $e->getMessage();
            $arrayRespuesta['code']    = 601;
            return $arrayRespuesta;
            }

        return $arrayRespuesta;

        }

   public function deleteProveedor($idProveedor)
   {

        $proveedorBean = ProveedorPeer::retrieveByPK($idProveedor);
        if(is_object($proveedorBean))
        {
            $criteria = new Criteria();
            $criteria->add(InformacionBancariaPeer::ID_RELACION,$idProveedor);
            $criteria->add(InformacionBancariaPeer::ID_TABLA,3);
            InformacionBancariaPeer::doDelete($criteria);
            $criteria->clear();
            $criteria->add(EscalaProveedorPeer::PROVEEDOR_ID, $idProveedor);
            EscalaProveedorPeer::doDelete($criteria);
            $criteria->clear();
            $criteria->add(MediosProveedorPeer::PROVEEDOR_ID,$idProveedor);
            MediosProveedorPeer::doDelete($criteria);

            $proveedorBean->delete();
            return true;
        }
        return false;

    }
    
    
   public function eliminarDetalleBancariaExtranjera($sessionName)
   {
     $arrayRespuesta =  array("success"=>false,"mensaje"=>"No existe detalle","objecto"=>null,"code"=>603);
     $detalleEscala= sfContext::getInstance()->getUser()->getAttribute($sessionName,null);

     if($detalleEscala!=null)
     {
        foreach($detalleEscala as $row)
        {
                try 
                {
                    $detalle=  InformacionBancariaExtranjeraProveedorPeer::retrieveByPK($row['id']);
                    if(is_object($detalle))
                    {
                        $detalle->delete();
                    }

                } catch (Exception $e)
                {
                    $arrayRespuesta['mensaje'] = $e->getMessage();
                    $arrayRespuesta['code']    = 601;
                    return $arrayRespuesta;
                }
        }
     }
     sfContext::getInstance()->getUser()->setAttribute($sessionName, null);
     return $arrayRespuesta;
   } 
   
   public function eliminarDetalleEscala($sessionName)
   {
     $arrayRespuesta =  array("success"=>false,"mensaje"=>"No existe detalle","objecto"=>null,"code"=>603);
     $detalleEscala= sfContext::getInstance()->getUser()->getAttribute($sessionName,null);

     if($detalleEscala!=null)
     {
        foreach($detalleEscala as $row)
        {
                try 
                {
                    $detalle=EscalaProveedorPeer::retrieveByPK($row['id']);
                    if(is_object($detalle))
                    {
                        $detalle->delete();
                    }

                } catch (Exception $e)
                {
                    $arrayRespuesta['mensaje'] = $e->getMessage();
                    $arrayRespuesta['code']    = 601;
                    return $arrayRespuesta;
                }
        }
     }
     sfContext::getInstance()->getUser()->setAttribute($sessionName, null);
     return $arrayRespuesta;
   }
               
   public function eliminarDetalleMedios($sessionName)
   {

        $arrayRespuesta =  array("success"=>false,"mensaje"=>"No existe detalle","objecto"=>null,"code"=>603);
        $detalleMedio= sfContext::getInstance()->getUser()->getAttribute($sessionName,null);
        if($detalleMedio!=null)
        {
            foreach($detalleMedio as $row)
            {
                try
                {
                    $detalle=MediosProveedorPeer::retrieveByPK($row['id']);
                    if(is_object($detalle))
                     {
                        $detalle->delete();
                     }
                } 
                catch (Exception $e) 
                {
                    $arrayRespuesta['mensaje'] = $e->getMessage();
                    $arrayRespuesta['code']    = 601;
                    return $arrayRespuesta;
                }
            }
        }

      sfContext::getInstance()->getUser()->setAttribute($sessionName, null);
      return $arrayRespuesta;
    }
    
    public function eliminarDetalleContactoBd($sessionName)
   {

        $arrayRespuesta =  array("success"=>false,"mensaje"=>"No existe detalle","objecto"=>null,"code"=>603);
        $detalleMedio= sfContext::getInstance()->getUser()->getAttribute($sessionName,null);
        if($detalleMedio!=null)
        {
            foreach($detalleMedio as $row)
            {
                try
                {
                    $detalle=  ContactoProveedorPeer::retrieveByPK($row['id']);
                    if(is_object($detalle))
                     {
                        $detalle->delete();
                     }
                } 
                catch (Exception $e) 
                {
                    $arrayRespuesta['mensaje'] = $e->getMessage();
                    $arrayRespuesta['code']    = 601;
                    return $arrayRespuesta;
                }
            }
        }

      sfContext::getInstance()->getUser()->setAttribute($sessionName, null);
      return $arrayRespuesta;
    }
    
               
   /* Metodo para editar la informacion bancaria extrajera que se encuentra en 
    * session al momento de crear un proveedor*/ 
   public function editarInformacionBancariaExtranjera($nombreSession,$arrayParametro)
   {

        $nombrebeneficiario        = $arrayParametro['nombrebeneficiario'];
        $cuentabeneficiario        = $arrayParametro['cuentabeneficiario'];
        $swif                      = $arrayParametro['swif'];
        $abba                      = $arrayParametro['abba'];
        $telefonobancoextranjero   = $arrayParametro['telefonobancoextranjero'];
        $paisbancoextranjero       = $arrayParametro['paisbancoextranjero'];
        $direccionbancoe           = $arrayParametro['direccionbancoe'];
        $nombrebancointermediario  = $arrayParametro['nombrebancointermediario'];
        $cuentabancointermediario  = $arrayParametro['cuentabancointermediario'];
        $paisbancointermediario    = $arrayParametro['paisbancointermediario'];
        
        
        $list           =  sfContext::getInstance()->getUser()->getAttribute($nombreSession,null);
        $clave          = -1;
          if($list!=null)
        {
              while ($row = current($list))
              {
                 if($row['id']==$arrayParametro["idDetalle"])
                 {
                    $array = $row;
                    $clave = key($list);
                    break;
                 }
                 next($list);
              }

              if($clave!=-1)
              {
                  $list[$clave]  = array("id"=>$array['id'],"nombrebeneficiario"=>$nombrebeneficiario,"cuentabeneficiario"=>$cuentabeneficiario,"swif"=>$swif,"abba"=>$abba,"telefonobancoextranjero"=>$telefonobancoextranjero,
                                    "paisbancoextranjero"=>$paisbancoextranjero,"direccionbancoe"=>$direccionbancoe,"nombrebancointermediario"=>$nombrebancointermediario,"cuentabancointermediario"=>$cuentabancointermediario,"paisbancointermediario"=>$paisbancointermediario);
                  sfContext::getInstance()->getUser()->setAttribute($nombreSession,$list);
                  return true;
              }
        }
        return false;
        }
 
/************Inicio de Metodos para crear sessiones que se generan al obtener al proveedor************/ 
      
   public function crearSessionDetalleContacto($sessionName,$idProveedor) 
   {
        $criteria      = new Criteria();
        $criteria->add(ContactoProveedorPeer::PROVEEDOR_ID,$idProveedor);
        $listaContacto = ContactoProveedorPeer::doSelect($criteria);
        if(count($listaContacto)>0)
        {
            foreach($listaContacto as $row)
            {
                $arrayParametros = array(
                  "nombre"   => $row->getNombreContacto(),
                  "email"    => $row->getEmailContacto(),
                  "telefono" => $row->getTelefonoContacto(),
                  "id"       => $row->getId(),
                );
               $this->agregarContactoEdit($sessionName,$arrayParametros);
            }
        }  
    } 
    
   public function crearSessionDetalleEscala($sessionName,$idProveedor) 
   {
        $criteria    = new Criteria();
        $criteria->add(EscalaProveedorPeer::PROVEEDOR_ID,$idProveedor);
        $listaEscala = EscalaProveedorPeer::doSelect($criteria);
        if(count($listaEscala)>0)
        {
            foreach($listaEscala as $row)
            {
                $arrayParametros = array(
                  "primeraescala"=>$row->getPrimeraEscala(),
                  "segundaescala"=>$row->getSegundaEscala(),
                  "porcentajeescala"=>$row->getPorcentajeEscala(),
                  "id"=>$row->getId(),
                );
               $this->agregarEscalaEdit($sessionName,$arrayParametros);
            }
        }
    }
    
   public function crearSessionDetalleMedios($sessionName,$idProveedor) 
   {
        $criteriaMedio= new Criteria();
        $criteriaMedio->add(MediosProveedorPeer::PROVEEDOR_ID,$idProveedor);
        $listaMedio=MediosProveedorPeer::doSelect($criteriaMedio);
        if(count($listaMedio)>0)
        {
           foreach($listaMedio as $row)
           {
                $arrayParametros= array(
                    "nombreMedios"=>$row->getNombreMedio(),
                    "id"         =>$row->getId()
                );
                $this->agregarMedioEdit($sessionName,$arrayParametros);
           }
       }
   }    
    
   public function crearSessionDetalleInformacionBancariaNacional($sessionName,$idProveedor) 
   {
            $criteria= new Criteria();
            /* 3 = Tabla Proveedor*/
            $criteria->add(InformacionBancariaPeer::ID_TABLA,3);
            $criteria->add(InformacionBancariaPeer::ID_RELACION,$idProveedor);
            $lista=InformacionBancariaPeer::doSelect($criteria);
            if(count($lista)>0)
            {
              $servicioAjax = new ajaxClass();
              foreach($lista as $row)
              {
                 /*Aca implemetar logica de moneda*/
                 /***********/

                 /**/
                 if($row->getMonedaId()==1){$moneda="soles";}
                 if($row->getMonedaId()==2){$moneda="dolares";}
                 $idCombox    = $row->getBancoId();
                 $isCombox    = false;
                 if($idCombox!=null)
                 {
                        $isCombox = true;
                        $servicioUtil = new utilClass();
                        /*En este caso el $nombrebanco contendria el Id del banco */            
                        $bancoBean = $servicioUtil->getBanco($idCombox);
                        if(count($bancoBean)>0)
                        {
                            $nombrebanco = $bancoBean[0]->getNombre();
                            $idCombox    = $bancoBean[0]->getId();
                        }
                 }

                 $arrayParametros = array("nombreBanco"=>$row->getNombreBanco(),
                                          "cuentaBanco"=>$row->getCuenta(),
                                          "moneda" => $moneda,
                                          "id" => $row->getId(),
                                          "isCombox"=>$isCombox,
                                          "idCombox"=>$idCombox
                                          );
                 $servicioAjax->agregarInformacionBancariaEdit($sessionName, $arrayParametros);
              }
           }
   }
    
   public function crearSessionDetalleInformacionBancariaExtranjera($sessionName,$idProveedor) 
   {
        $criteriaInfoBancariaExtranjera= new Criteria();
        $criteriaInfoBancariaExtranjera->add(InformacionBancariaExtranjeraProveedorPeer::PROVEEDOR_ID,$idProveedor);
        $listaMedio=InformacionBancariaExtranjeraProveedorPeer::doSelect($criteriaInfoBancariaExtranjera);
        if(count($listaMedio)>0)
        {
        
           foreach($listaMedio as $row)
           {
                $arrayParametros= array(
                    "id"                        => $row->getId(),
                    "nombrebeneficiario"        => $row->getNombreBancoBeneficiario(),
                    "cuentabeneficiario"        => $row->getCuentaBancoBeneficiario(),
                    "swif"                      => $row->getSwif(),
                    "abba"                      => $row->getAbba(),
                    "telefonobancoextranjero"   => $row->getTelefono(),
                    "paisbancoextranjero"       => $row->getPaisBeneficiario(),
                    "direccionbancoe"           => $row->getDireccion(),
                    "nombrebancointermediario"  => $row->getNombreBancoIntermediario(),
                    "cuentabancointermediario"  => $row->getCuentaBancoIntermediario(),
                    "paisbancointermediario"    => $row->getPaisBancoIntermediario()
                );
                $this->agregarInformacionBancariaExtranjeraEdit($sessionName,$arrayParametros);
           }
       }
   }  
   
   public function agregarContactoEdit($nombreSession,$arrayParametros)
   {
        $nombre   = $arrayParametros['nombre'];
        $email    = $arrayParametros['email'];
        $telefono = $arrayParametros['telefono'];
        $id       = $arrayParametros['id'];

        if($nombre!="" && $email!="" && $telefono!="")
        {
              $list = sfContext::getInstance()->getUser()->getAttribute($nombreSession,null);
              $newArray= array("id"=>$id,"nombre"=>$nombre,"email"=>$email,"telefono"=>$telefono);
              $list[]   = $newArray;
              sfContext::getInstance()->getUser()->setAttribute($nombreSession,$list);
        } 
   }
    
   public function agregarEscalaEdit($nombreSession,$arrayParametros)
   {
        $primeraescala    = $arrayParametros['primeraescala'];
        $segundaescala    = $arrayParametros['segundaescala'];
        $porcentajeescala = $arrayParametros['porcentajeescala'];
        $id               = $arrayParametros['id'];

        if($primeraescala!="" && $segundaescala!="" && $porcentajeescala!="")
        {
              $list = sfContext::getInstance()->getUser()->getAttribute($nombreSession,null);
              $newArray= array("id"=>$id,"primeraescala"=>$primeraescala,"segundaescala"=>$segundaescala,"porcentajeescala"=>$porcentajeescala);
              $list[]   = $newArray;
              sfContext::getInstance()->getUser()->setAttribute($nombreSession,$list);
        } 
   }

   public function agregarMedioEdit($nombreSession,$arrayParametros)
   {
        $nombreMedio = $arrayParametros['nombreMedios'];
        $id          = $arrayParametros['id'];

        if($nombreMedio!="")
        {
            $list = sfContext::getInstance()->getUser()->getAttribute($nombreSession,null);
            $newArray=array("id"=>$id,"nombreMedios"=>$nombreMedio);
             $list[]   = $newArray;
            sfContext::getInstance()->getUser()->setAttribute($nombreSession,$list);
       }            
   }   
    
   public function agregarInformacionBancariaExtranjeraEdit($nombreSession,$arrayParametros)
   {         
        $id                          = $arrayParametros['id'];        
        $nombrebeneficiario          = $arrayParametros['nombrebeneficiario'];
        $cuentabeneficiario          = $arrayParametros['cuentabeneficiario'];
        $swif                        = $arrayParametros['swif'];
        $abba                        = $arrayParametros['abba'];
        $telefonobancoextranjero     = $arrayParametros['telefonobancoextranjero'];
        $paisbancoextranjero         = $arrayParametros['paisbancoextranjero'];
        $direccionbancoe             = $arrayParametros['direccionbancoe'];
        $nombrebancointermediario    = $arrayParametros['nombrebancointermediario'];
        $cuentabancointermediario    = $arrayParametros['cuentabancointermediario'];
        $paisbancointermediario      = $arrayParametros['paisbancointermediario'];
       
        $list = sfContext::getInstance()->getUser()->getAttribute($nombreSession,null);
        $newArray = array("id"=>$id,"nombrebeneficiario"=>$nombrebeneficiario,"cuentabeneficiario"=>$cuentabeneficiario,"swif"=>$swif,"abba"=>$abba,"telefonobancoextranjero"=>$telefonobancoextranjero,
                              "paisbancoextranjero"=>$paisbancoextranjero,"direccionbancoe"=>$direccionbancoe,"nombrebancointermediario"=>$nombrebancointermediario,"cuentabancointermediario"=>$cuentabancointermediario,"paisbancointermediario"=>$paisbancointermediario);
        $list[]   = $newArray;
        sfContext::getInstance()->getUser()->setAttribute($nombreSession,$list);       
   }
        
/*=================Fin de de Metodos para crear sessiones que se generan al obtener al proveedor==============*/      
        
/************Inicio de Metodos para insertar detalles del Formulario Proveedores************/   
   
   public function insertarDetalleInformacionBancariaExtranajera($proveedorId) 
   {         
       $detalleCuentaExtranjera =  sfContext::getInstance()->getUser()->getAttribute('s_sessionCuentaBancariaExtranjera', null);
       if($detalleCuentaExtranjera!=null)
        {
            foreach($detalleCuentaExtranjera as $row)
            {
                $detalleCuentaExtranjera= new InformacionBancariaExtranjeraProveedor();
                $detalleCuentaExtranjera->setNombreBancoBeneficiario($row['nombrebeneficiario']);
                $detalleCuentaExtranjera->setCuentaBancoBeneficiario($row['cuentabeneficiario']);
                $detalleCuentaExtranjera->setSwif($row['swif']);
                $detalleCuentaExtranjera->setAbba($row['abba']);
                $detalleCuentaExtranjera->setTelefono($row['telefonobancoextranjero']);
                $detalleCuentaExtranjera->setPaisBeneficiario($row['paisbancoextranjero']);
                $detalleCuentaExtranjera->setDireccion($row['direccionbancoe']);
                $detalleCuentaExtranjera->setNombreBancoIntermediario($row['nombrebancointermediario']);
                $detalleCuentaExtranjera->setCuentaBancoIntermediario($row['cuentabancointermediario']);
                $detalleCuentaExtranjera->setPaisBancoIntermediario($row['paisbancointermediario']);
                $detalleCuentaExtranjera->setEstado(1);
                $detalleCuentaExtranjera->setProveedorId($proveedorId);
                $detalleCuentaExtranjera->save();
            }               
        }
   }
   
   public function insertarDetalleEscala($proveedorId) 
   {
        $detalleEscala           =  sfContext::getInstance()->getUser()->getAttribute('s_sesionEscala',null);
        if($detalleEscala!=null)
        {
            foreach($detalleEscala as $row)
            {
                $detalleEscala = new EscalaProveedor();
                $detalleEscala->setPrimeraEscala($row['primeraescala']);
                $detalleEscala->setSegundaEscala($row['segundaescala']);
                $detalleEscala->setPorcentajeEscala($row['porcentajeescala']);
                $detalleEscala->setEstado(1);
                $detalleEscala->setProveedorId($proveedorId);
                $detalleEscala->save();
            }           
        }
   }
   
   public function insertarDetalleMedios($proveedorId)
   {
        $detalleMedios     =  sfContext::getInstance()->getUser()->getAttribute('s_agregarMedios',null);
        if($detalleMedios!="")
        {
            foreach($detalleMedios as $row)
            {
                $detalleMedios= new MediosProveedor();
                $detalleMedios->setNombreMedio($row['nombreMedios']);
                $detalleMedios->setEstado(1);
                $detalleMedios->setProveedorId($proveedorId);
                $detalleMedios->save();
            }            
        }
   }
   
   public function insertarDetalleContacto($proveedorId)
   {
        $detalleMedios     =  sfContext::getInstance()->getUser()->getAttribute('s_sesionDetalleContacto',null);
        if($detalleMedios!="")
        {
            foreach($detalleMedios as $row)
            {
                $detalleMedios= new ContactoProveedor();
                $detalleMedios->setNombreContacto($row['nombre']);
                $detalleMedios->setEmailContacto($row['email']);
                $detalleMedios->setTelefonoContacto($row['telefono']);
                $detalleMedios->setProveedorId($proveedorId);
                $detalleMedios->save();
            }            
        }
   }

/*=================Fin de Metodos para insertar detalles del Formulario Proveedores==============*/
   
/********************************Inicio Metodo Detalle Contacto***********************************/
        
   public function agregarDetalleContacto($nombreSession,$arrayParametro)
   {
        $nombre   = $arrayParametro['nombre'];
        $email    = $arrayParametro['email'];
        $telefono = $arrayParametro['telefono'];

        if($nombre!="" && $email!="" && $telefono!="")
        {
            $list = sfContext::getInstance()->getUser()->getAttribute($nombreSession,null);
            $id   = 1;
            $repetido = false;
            if($list!=null)
            {
                $result   = array_reverse($list);
                $id       = $result[0]['id']+1;
            }
            if($repetido==false)
            {
                $newArray = array("id"=>$id,"nombre"=>$nombre,"email"=>$email,"telefono"=>$telefono);
                $list[]   = $newArray;
            }
            sfContext::getInstance()->getUser()->setAttribute($nombreSession,$list);

        }
    }  
    
   public function editarDetalleContacto($nombreSession,$arrayParametro)
   {
        $nombre   = $arrayParametro['nombre'];
        $email    = $arrayParametro['email'];
        $telefono = $arrayParametro['telefono'];
        $list           =  sfContext::getInstance()->getUser()->getAttribute($nombreSession,null);
        $clave          = -1;
          if($list!=null)
        {
              while ($row = current($list))
              {
                 if($row['id']==$arrayParametro["idDetalle"])
                 {
                    $array = $row;
                    $clave = key($list);
                    break;
                 }
                 next($list);
              }

              if($clave!=-1)
              {
                  $list[$clave]  =  array("id"=>$array['id'],"nombre"=>$nombre,"email"=>$email,"telefono"=>$telefono);
                  sfContext::getInstance()->getUser()->setAttribute($nombreSession,$list);
                  return true;
              }
        }
        return false;
   }
   
   public function eliminarDetalleContacto($nombreSession,$id)
   {
       $list = sfContext::getInstance()->getUser()->getAttribute($nombreSession,null);
       $clave          = -1;
       if($list!=null)
       {
            while ($row = current($list))
            {
                if ($row['id']==$id)
                {
                    $clave =  key($list);
                    break;
                }
                next($list);
            }
            if($clave!=-1)
            {
                unset($list[$clave]);
                if(count($list)==0)
                {
                    sfContext::getInstance()->getUser()->setAttribute($nombreSession,null);
                }
                else
                {
                   sfContext::getInstance()->getUser()->setAttribute($nombreSession,$list);
                }
               return true;
            }
       }
       return false;
   }
   
   public function eliminarDetalleContactoEdit($nombreSession,$id)
   {
        $list = sfContext::getInstance()->getUser()->getAttribute($nombreSession,null);
        $newArray = array("id"=>$id);
        $list[]   = $newArray;
        sfContext::getInstance()->getUser()->setAttribute($nombreSession,$list);
        return true;
   }
   
        
/*============================Fin Metodos Detalle Contacto==========================*/
/*************Inicio Metodos para Grabar las modificaciones de los detalles**********
 *****************realizados en el modulo de editar un proveedor *******************/
    
   public function editarDetalleInformacionBancariaExtranjera($sessionName,$idProveedor)
   {
        $arrayRespuesta =  array("success"=>false,"mensaje"=>"No existe detalle","objecto"=>null,"code"=>603);
        $detalleMedio=  sfContext::getInstance()->getUser()->getAttribute($sessionName,null);
       
        if($detalleMedio!=null)
        {
           
            foreach($detalleMedio as $row)
            {
                try
                {
                    $detalleCuentaExtranjera=  InformacionBancariaExtranjeraProveedorPeer::retrieveByPK($row['id']);
                    if(!is_object($detalleCuentaExtranjera))
                    {
                         
                        $detalleCuentaExtranjera= new InformacionBancariaExtranjeraProveedor();                        
                    }                   
                    
                    $detalleCuentaExtranjera->setNombreBancoBeneficiario($row['nombrebeneficiario']);
                    $detalleCuentaExtranjera->setCuentaBancoBeneficiario($row['cuentabeneficiario']);
                    $detalleCuentaExtranjera->setSwif($row['swif']);
                    $detalleCuentaExtranjera->setAbba($row['abba']);
                    $detalleCuentaExtranjera->setTelefono($row['telefonobancoextranjero']);
                    $detalleCuentaExtranjera->setPaisBeneficiario($row['paisbancoextranjero']);
                    $detalleCuentaExtranjera->setDireccion($row['direccionbancoe']);
                    $detalleCuentaExtranjera->setNombreBancoIntermediario($row['nombrebancointermediario']);
                    $detalleCuentaExtranjera->setCuentaBancoIntermediario($row['cuentabancointermediario']);
                    $detalleCuentaExtranjera->setPaisBancoIntermediario($row['paisbancointermediario']);
                    $detalleCuentaExtranjera->setProveedorId($idProveedor);  
                    $detalleCuentaExtranjera->setEstado(1);
                   
                    $detalleCuentaExtranjera->save();
                    
                    $arrayRespuesta['success']  = true;
                    $arrayRespuesta['mensaje']  = "Exito";
                  }
                  catch (Exception $e)
                  {
                      print_r("entro al catch");
                      $arrayRespuesta['mensaje'] = $e->getMessage();
                      $arrayRespuesta['code']    = 601;
                      return $arrayRespuesta;
                     
                  }

            }
        }
        else
        {
            $arrayRespuesta['success'] = true;
            $arrayRespuesta['mensaje']  = "Exito (No session)";

        }
        sfContext::getInstance()->getUser()->setAttribute($sessionName, null);
        return $arrayRespuesta;
   }   
 
   public function editarDetalleMedios($sessionName,$idProveedor)
   {
        $arrayRespuesta =  array("success"=>false,"mensaje"=>"No existe detalle","objecto"=>null,"code"=>603);
        $detalleMedio   =  sfContext::getInstance()->getUser()->getAttribute($sessionName,null);
        if($detalleMedio!=null)
        {
            foreach($detalleMedio as $row)
            {
                try
                {                            
                    $detalleMedio=MediosProveedorPeer::retrieveByPK($row['id']);
                    if(!is_object($detalleMedio))
                    {   
                        $detalleMedio= new MediosProveedor();                        
                    }
                    $detalleMedio->setNombreMedio($row['nombreMedios']);
                    $detalleMedio->setEstado(1);
                    $detalleMedio->setProveedorId($idProveedor);
                    $detalleMedio->save();                   
                    $arrayRespuesta['success'] = true;
                    $arrayRespuesta['mensaje']  = "Exito";
                 }
                catch (Exception $e)
                {
                    $arrayRespuesta['mensaje'] = $e->getMessage();
                    $arrayRespuesta['code']    = 601;
                    return $arrayRespuesta;
                }
            }
        }
        else
        {
            $arrayRespuesta['success'] = true;
            $arrayRespuesta['mensaje']  = "Exito (No session)";
        }
        sfContext::getInstance()->getUser()->setAttribute($sessionName, null);
        return $arrayRespuesta;
   }
   
   public function editarDetalleEscala($sessionName,$idProveedor)
   {
       $arrayRespuesta =  array("success"=>false,"mensaje"=>"No existe detalle","objecto"=>null,"code"=>603);
       $detalleEscala=  sfContext::getInstance()->getUser()->getAttribute($sessionName,null);

       /*Si la sesion que obtengo del parametro sessionName existe  */
       
       if($detalleEscala!=null)
       {
            foreach($detalleEscala as $row)
            {
                    try 
                    {
                        $detalleEscala=EscalaProveedorPeer::retrieveByPK($row['id']);                       
                        if(!is_object($detalleEscala))
                        {
                            $detalleEscala= new EscalaProveedor();                             
                        }                       
                        $detalleEscala->setPrimeraEscala($row['primeraescala']);
                        $detalleEscala->setSegundaEscala($row['segundaescala']);
                        $detalleEscala->setPorcentajeEscala($row['porcentajeescala']);
                        $detalleEscala->setEstado(1);
                        $detalleEscala->setProveedorId($idProveedor);
                        $detalleEscala->save();
                      
                        $arrayRespuesta['success'] = true;
                        $arrayRespuesta['mensaje']  = "Exito";
                    }
                    catch (Exception $e)
                    {                                
                        $arrayRespuesta['mensaje'] = $e->getMessage();
                        $arrayRespuesta['code']    = 601;
                        return $arrayRespuesta; 
                    }                            
            }
       }
       else
       {
            $arrayRespuesta['success'] = true;
            $arrayRespuesta['mensaje']  = "Exito (No session)";
       }
       sfContext::getInstance()->getUser()->setAttribute($sessionName, null);
       return $arrayRespuesta;
   }
   
   public function editarDetalleContactoBd($sessionName,$idProveedor)
   {
       $arrayRespuesta =  array("success"=>false,"mensaje"=>"No existe detalle","objecto"=>null,"code"=>603);
       $detalleContacto=  sfContext::getInstance()->getUser()->getAttribute($sessionName,null);

       /*Si la sesion que obtengo del parametro sessionName existe  */
    
       if($detalleContacto!=null)
       {
            foreach($detalleContacto as $row)
            {
                    try 
                    {
                        $contactoBean=  ContactoProveedorPeer::retrieveByPK($row['id']);                       
                        if(!is_object($contactoBean))
                        {
                            $contactoBean= new ContactoProveedor();                             
                        }                       
                        $contactoBean->setNombreContacto($row['nombre']);
                        $contactoBean->setEmailContacto($row['email']);
                        $contactoBean->setTelefonoContacto($row['telefono']);
                        $contactoBean->setProveedorId($idProveedor);
                        $contactoBean->save();
                      
                        $arrayRespuesta['success'] = true;
                        $arrayRespuesta['mensaje']  = "Exito";
                    }
                    catch (Exception $e)
                    {                                
                        $arrayRespuesta['mensaje'] = $e->getMessage();
                        $arrayRespuesta['code']    = 601;
                        return $arrayRespuesta; 
                    }                            
            }
       }
       else
       {
            $arrayRespuesta['success'] = true;
            $arrayRespuesta['mensaje']  = "Exito (No session)";
       }
       sfContext::getInstance()->getUser()->setAttribute($sessionName, null);
       return $arrayRespuesta;
   }
/*=======================================Fin ======================================*/   
}
?>
